https://www.youtube.com/watch?v=klbGg8dmYTM
i 的 左子節點:2 * i + 1
i 的 右子節點:2 * i + 2
i 的 父節點:(i - 1) // 2
O(log n)
O(n)
O(n)。優先順序佇列(Priority Queue):
* 優先順序佇列是一種特殊的佇列,每次取出優先順序最高的元素。
* 使用最大堆或最小堆可以實現優先順序佇列,最大堆取出最大值,最小堆取出最小值。
O(n log n),是穩定排序演算法之一。假設我們有一個陣列 [4, 10, 3, 5, 1],我們希望把它轉換成最大堆:
步驟 1:建構最大堆
* 將 [4, 10, 3, 5, 1] 插入到堆積樹中:
* 根節點:10
* 左子節點:5
* 右子節點:3
* 左子節點的左子節點:4
* 左子節點的右子節點:1
* 經過調整,形成的最大堆為:
     10
    /  \
   5    3
  / \
 4   1
步驟 2:插入一個新節點(例如:7)
7 插入到最左邊的空位置,即 4 的左邊:     10
    /  \
   5    3
  / \
 7   1
5 交換:     10
    /  \
   7    3
  / \
 5   1